/**
 * \file Файл описания базового класса для отрисовки графика
 *
 * Файл содержит определение класса для отрисовки графика
 */
#ifndef PLOTDATA_H
#define PLOTDATA_H

#include <glibmm/object.h>
#include <gdkmm/rgba.h>
#include <cairomm/cairomm.h>
#include "enums.h"

using namespace Glib;

/**
 * @brief Базовый класс рисования графика
 *
 * Класс отнаследован от класса Object
 * Определены базовые члены
 */
    class PlotData:public Object{

        PlotData (const PlotData &source) = delete;

    protected:

        bool m_shown;///< отображение графика на холсте
        bool m_managed;///< для корректеой работы Object::make_manage()
        Gdk::RGBA m_color;///< цвет графика
        Gdk::RGBA m_symbol_color;///< цвет символа на графике
        LineStyle m_line_style;///< стиль линии
        double m_line_width;///< толщина линии
        double m_symbol_scale_factor;///< масштаб символа на графике
        ustring m_name;///< название графика
        ustring m_symbol;///< значение символа
        sigc::signal<void(void)>        m_SignalChanged, m_SignalDataModified;
        virtual void OnChanged();
        virtual void OnDataModified();

    public:

        PlotData(Gdk::RGBA color,
                 LineStyle line_style,
                 double line_width);
        sigc::signal<void(void)> SignalChanged();
        sigc::signal<void(void)> SignalDataModified();
        void SetName(ustring name);
        ustring GetName();
        void Show();
        void Hide();
        bool IsShowing();
        void SetColor(Gdk::RGBA color);
        Gdk::RGBA GetColor();
        void SetLineStyle(LineStyle line_style);
        LineStyle GetLineStyle();
        void SetLineWidth(double line_width);
        double GetLineWidth();
        virtual void set_manage();
        virtual void DataDraw(const Cairo::RefPtr<Cairo::Context> &cr,
                              uint16_t width,
                              uint16_t height,
                              uint32_t x_interval_begin,
                              uint32_t x_interval_end,
                              double y_offset_min,
                              double y_offset_max);
        virtual ~PlotData();
    };
#endif // PLOTDATA_H
